/**
 * @author Michel OLIVIER
 * @version 1.0
 * @description Implémente la méthode metaWeblog.getRecentPosts de dotclear 1 et 2
 * Description : Renvoie la liste des billets les plus récents sur le système.
 * Paramètres : String blogid, String username, String password, int numberOfPosts.
 * Retourne : En cas de succès, un tableau de structs contenant ISO.8601 dateCreated, String userid, String postid, String description, String title, String link, String permaLink, String mt_excerpt, String mt_text_more, int mt_allow_comments, int mt_allow_pings, String mt_convert_breaks, String mt_keywords ; sinon une erreur XML/RPC.
 * Les champs mt_text_more, mt_convert_breaks et mt_keywords sont toujours vide. Le champs description et mt_excerpt contiennent respectivement le contenu et le chapo du billet
 */
package com.androdot;

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import org.xmlrpc.android.XMLRPCClient;

import android.app.ListActivity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.Toast;

public class RecentPosts extends ListActivity {
	
	@SuppressWarnings({ "unchecked" })
	@Override
	public void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		// Chargement des préférences avec l'Activity "Preference"
		SharedPreferences preferences = PreferenceManager
				.getDefaultSharedPreferences(this);
		String utilisateur = preferences.getString("utilisateur", "");
		String urlBlog = preferences.getString("urlBlog", "");
		String mdp = preferences.getString("mdp", "");
		String nbPost = preferences.getString("nbRecentPosts", "");
		
		// Client XML RPC avec URL du blog
		XMLRPCClient client = new XMLRPCClient(urlBlog);
		
		/* méthodes utilsé
		 * metaWeblog.getRecentPosts
		 * Description : Renvoie la liste des titres des billets les plus récents sur le système. 
		 * Paramètres : String blogid, String username, String password, int numberOfPosts.
		 * Retourne : En cas de succès, un tableau de structs contenant ISO.8601
		 * dateCreated, String userid, String postid, String description, String title, String link,
		 * String permaLink, String mt_excerpt, String mt_text_more, int mt_allow_comments,
		 * int mt_allow_pings, String mt_convert_breaks, String mt_keywords ; sinon une erreur XML/RPC. 
		 */
					
			Map<String, Object> struct = new HashMap<String, Object>(); //Articles complets
			final ArrayList<String> titres =  new ArrayList<String>(); // titre
			final ArrayList<String> postIds =  new ArrayList<String>(); // id
			final ArrayList<String> descriptions =  new ArrayList<String>(); //description
			final ArrayList<String> mt_excerpt =  new ArrayList<String>();
			final ArrayList<String> mt_allow_comments =  new ArrayList<String>();
			final ArrayList<String> mt_allow_pings =  new ArrayList<String>();
		try {
				// requetes xml rpc
			Object[] res = (Object[]) client.call("metaWeblog.getRecentPosts", "1", utilisateur, mdp, Integer.valueOf(nbPost));

			for (int index = 0; index < res.length; index++){
				struct = (Map<String, Object>) res[index];
				titres.add(String.valueOf(struct.get("title")));
				postIds.add(String.valueOf(struct.get("postid")));
				// contenu du chapo
				descriptions.add(String.valueOf(struct.get("description")));
				// contenu de l'article
				mt_excerpt.add(String.valueOf(struct.get("mt_excerpt")));
				mt_allow_comments.add(String.valueOf(struct.get("mt_allow_comments")));
				mt_allow_pings.add(String.valueOf(struct.get("mt_allow_pings")));
			}
		} catch (Exception e) {
			Log.e("ARKA", e.getMessage());
		}
		
		try {	
			setListAdapter((new ArrayAdapter<String>(this, R.layout.recentposts, titres)));
			// création de la listeView
			ListView lv = getListView();
			lv.setTextFilterEnabled(true);
			lv.setOnItemClickListener(new OnItemClickListener() {
				public void onItemClick(AdapterView<?> parent, View view, int position, long id) {
					try {
						// demmare l'activity main
						Intent i = new Intent(RecentPosts.this , Androdot.class);
				    	i.putExtra("titre", titres.get(Integer.valueOf(position)));
				    	i.putExtra("description", descriptions.get(Integer.valueOf(position)));
				    	i.putExtra("postid", postIds.get(Integer.valueOf(position)));
				    	i.putExtra("mt_excerpt", mt_excerpt.get(Integer.valueOf(position)));
				    	i.putExtra("mt_allow_comments", mt_allow_comments.get(Integer.valueOf(position)));
				    	i.putExtra("mt_allow_pings", mt_allow_pings.get(Integer.valueOf(position)));
				    	startActivityForResult(i, 1);
				    	finish();
					} catch (Exception e) {
						Log.e("ARKA", e.getMessage());
					}
			    }
			  });
		} catch (Exception e) {
			Log.e("ARKA", e.getMessage());
		}
	}
}